iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1

跟多數高階語言一樣,Python屬於多範程類型語言 所以這幾天會來學習python 最具代表性的函數 , 物件導向 , 基礎剖面導向


函數式

一開始學python應該有學到 def: 的用法 就是以函數來替代冗長的代碼 強調的是簡化代碼與輸入輸出特性 所以從函數開始已經有模組化(實體功能)的感覺了 不是只有單純的簡化

Ex:計算體積

def abc(l , w , h):
    co = l*w*h #計算長寬高
    return co
print(abc(25,25,256))

  • 返回的重要性

函數寫好了但沒有return(返回值)就相當於沒結尾,因為沒有告訴程式呼叫哪個內部資料 所以它就只會採用外部資料,但如果又沒資料或調用外部的程式,就會印出無效值None。

def abc(l, w ,h):
    co = l*w*h
    #return co
print(abc(25,25,256))

Out[ ]:None

返回值也可當一個值來看

def fxxking(x):
    return "shit" , -1
print(fxxking(123))
  • 調用名稱物件

那如果只是當作調用名稱或過渡的函式 並不是當作有用函式的話 就可以使用此方法

def fxxking():
    pass  
  • 外部引入

既然要呼叫函數,可以運用各種方法呼叫(只要程式讀的到內容都可以)

import abc #引入剛剛的函式
print(abc(15,15,15))
  • 閉包

閉包是由多(巢)函式衍生而來的

def db_sum(*add_all):  #s傳回加總
    def sum():
        s = 0
        for i in add_all:
            s += i
        return s
    return sum
sa = db_sum(1,2,3,4,5)
print(sa())

這裡會用到所謂的 萬用字元<*> 可省略傳回重複的值(後面會在談到)


  • 閉包實戰
    是函數最重要的概念 普通的函式輸入隨著程式改變,輸出不改變。但閉包就不同了 用法是把回傳值傳入內部函式的某位置 就可改變每次輸出值
    正確來說只是看起來輸出值改變了 但其實只是內部值被重複暫存到可見函數(像上面有個陣列) 如果把全部函數拆開 值其實沒有被改變
#把多函數做成閉包
def count():
    l = []
    def a(j):
        def b():
            return j+j
        return b
    for i in range(0,5):
        l.append(a(i))  #傳回每次的值
    return l

Out[ ]:f1, f2, f3 , f4 , f5 = count()
        print(f1(),f2(),f3(),f4(),f5())

閉包傳回次數是固定的 因為函式不能有沒用到的狀況


上一篇
[D11] 程式設計法
下一篇
[D13] 物件導向
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言